package com.itheima.tliasmanagementspringboot.mapper;

import com.itheima.tliasmanagementspringboot.pojo.Emp;
import com.itheima.tliasmanagementspringboot.dtos.PageDto;
import com.itheima.tliasmanagementspringboot.pojo.Result;
import org.apache.ibatis.annotations.Delete;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Select;

import java.util.List;
import java.util.Map;

@Mapper
public interface EmpMapper {
    /**
     * 功能:查询全部员工信息
     * @return 查询到的员工信息的集合
     */
    @Select("select * from emp")
    List<Emp> queryAllEmpMapper();

    /**
     * 功能: 根据id查询员工信息
     * @return 查询到的员工信息的集合
     *
     *
     */
    @Select("select * from emp where id=#{id}")
    Emp queryEmpByConditionMapper(Integer id);

    /**
     * 功能:通过部门id查询该部门下是否有员工
     * @param id 部门id
     * @return 返回部门下员工数量
     */
    @Select("select count(*) from emp where dept_id=#{id}")
    Integer queryIsExistsEmpInDept(Integer id);

    /**
     * 功能:通过员工id查询员工name
     * @param id 员工id
     * @return 返回部门下员工数量
     */
    @Select("select name from emp where id=#{id}")
    String queryEmpNameById(Integer id);

    /**
     * 功能: 根据id查删除员工信息
     *
     */
    void deleteEmpByIds(Integer[] ids);

    /**
     * 功能: 添加/插入一条员工信息
     *
     * @param emp
     */
    void insertEmpMapper(Emp emp);

    /**
     * 功能:根据id更新员工信息
     * @param emp :员工id
     *
     */
    void updateEmpByIdMapper(Emp emp);

    /**
     * 功能:分页条件查询员工信息集合
     * @param pageDto 请求参数(条件)
     * @return 返回的是查询到的数据集合
     */
    List<Emp> pageQueryEmpListMapper(PageDto pageDto);
    /**
     * 功能:分页查询员工信息总条数
     * @param pageDto 请求参数(条件)
     * @return 返回的是总条数
     */
    Integer pageQueryEmpTotalMapper(PageDto pageDto);

    @Select("select count(*) from emp where username=#{username}")
    Integer queryEmpNameByNameMapper(String username);


    List<Map<String, Integer>> queryCountGroupByGender();

    List<Map<String, Object>> queryCountGroupByJob();

    @Select("select * from emp where username=#{username} and password=#{password}")
    Emp queryInfoByUsernameAndPassword(Emp emp);

    @Select("select * from emp where username=#{username}")
    Emp queryInfoByUsername(Emp emp);

    @Delete("delete from emp where  dept_id=#{deptId}")
    void deleteEmpByDeptId(Integer deptId);
}
